package com.fifth.apartment.controller;

import cn.hutool.json.JSONObject;
import com.alipay.api.AlipayClient;
import com.alipay.api.request.AlipayTradeQueryRequest;
import com.alipay.api.response.AlipayTradeQueryResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * TODO
 *
 * @author Dao
 * @since 2024/7/25
 */
@RestController
@RequestMapping("/app/query")
@Slf4j
public class QueryController {

    private final String TRADE_FINISHED = "TRADE_FINISHED";
    private final String TRADE_SUCCESS = "TRADE_SUCCESS";

    @Value("${alipay.app_id}")
    private String notifyUrl;

    @Value("${alipay.app_id}")
    private String returnUrl;

    @Value("${alipay.charset}")
    private String charset;

    @Value("${alipay.alipay_public_key}")
    private String alipayPublicKey;

    @Value("${alipay.sign_type}")
    private String signType;

    @Resource
    private AlipayClient alipayClient;

    /**
     * @param tradeNum 商户网站唯一订单号(out_trade_no) 或 支付宝交易号(trade_no)
     * @throws Exception
     * @deprecated 具体API参数说明参考：https://opendocs.alipay.com/open/02ivbt
     */
    @GetMapping("/query/{tradeNum}")
    @ResponseBody
    public Object query(@PathVariable("tradeNum") String tradeNum) throws Exception {
        //创建API对应的request类
        AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
        JSONObject bizContent = new JSONObject();
        // 商户网站唯一订单号
        bizContent.put("out_trade_no", tradeNum);
        // 支付宝交易号
        //bizContent.put("trade_no", tradeNum);
        request.setBizContent(bizContent.toString());
        AlipayTradeQueryResponse response = alipayClient.execute(request);

        // 打印结果
        log.debug(response.getBody());

        // 根据response中的结果继续业务逻辑处理
        if (response.isSuccess()) {
            log.info("调用支付宝成功");
            log.info(response.getSubMsg());
            /**
             * 获取状态交易状态：
             * WAIT_BUYER_PAY（交易创建，等待买家付款）
             * TRADE_CLOSED（未付款交易超时关闭，或支付完成后全额退款）
             * TRADE_SUCCESS（交易支付成功）
             * TRADE_FINISHED（交易结束，不可退款）
             */
            String tradeStatus = response.getTradeStatus();
            log.info("交易状态：" + tradeStatus);

            log.info("支付宝交易号：" + response.getTradeNo());
            log.info("商家订单号：" + response.getOutTradeNo());
            log.info("买家支付宝账号：" + response.getBuyerLogonId());
            log.info("买家在支付宝的用户id：" + response.getBuyerUserId());
            log.info("买家在支付宝的用户id：" + response.getBuyerUserId());
        } else {
            log.error("调用支付宝失败");
            log.error(response.getSubCode());
            log.error(response.getSubMsg());
        }
        return "调用查询订单";
    }
}

